{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Effect of Scaling \n",
    "Recall that in our formulation of TMM, we are scaling the H-fields as\n",
    "$$\n",
    "\\mathbf{H} \\rightarrow i \\eta_0 \\mathbf{H}\n",
    "$$\n",
    "\n",
    "Since we are rescaling the H-fields by a complex factor in our TMM formalism, we must check that the E-field and H-field solutions in a homogeneous layer are no longer IN PHASE (H field should be off by a factor of $\\pi/2$\n",
    "\n",
    "WE also have a scaling of coordinates $z \\rightarrow k_0 z$, but this is not as important"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "check on eigendecomp\n",
      "2.0293072715139053e-17\n",
      "(100, 4)\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\zhaon\\Anaconda3\\lib\\site-packages\\numpy\\core\\numeric.py:492: ComplexWarning: Casting complex values to real discards the imaginary part\n",
      "  return array(a, dtype, copy=False, order=order)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAPgAAAD8CAYAAABaQGkdAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAACEBJREFUeJzt3cGLHHUaxvHn2TGirIKH9CEkYceD\nCOLBQJOL4CG4MHrRozl4EuYkRNiLV/8Bb3sZMOwuiCLEg4iL5BCRgMb0hCjG0SUIi4NCehHRXFYi\n7x6mV7Nxsl1JV3VNPX4/0NA103S/leQ7NV3d6Z+rSgAy/a7vAQB0h8CBYAQOBCNwIBiBA8EIHAg2\n2MBtr9n+wvZl2y/2PU9bbJ+0fcX2p33P0ibbh22fsb1l+5LtE33P1Abbd9n+yPbHs/16qe+Zruch\nvg5ue0XSPyT9UdK2pPOSjlfVZ70O1gLbj0m6KulvVfVw3/O0xfYBSQeq6oLteyVtSnp66H9nti3p\n91V11fY+SWclnaiqD3seTdJwj+BHJV2uqi+r6kdJr0t6queZWlFV70v6tu852lZV31TVhdn1HyRt\nSTrY71SLqx1XZ5v7Zpc9c9QcauAHJX113fa2Av6x/FbYXpV0RNK5fidph+0V2xclXZF0uqr2zH4N\nNXDv8rU981MTN2f7HkmnJL1QVd/3PU8bquqnqnpE0iFJR23vmadWQw18W9Lh67YPSfq6p1nQ0Ow5\n6ilJr1bVm33P07aq+k7Se5LWeh7lZ0MN/LykB2zfb/tOSc9IeqvnmfB/zE5GvSJpq6pe7nuettge\n2b5vdv1uSY9L+rzfqX4xyMCr6pqk5yW9q52TNW9U1aV+p2qH7dckfSDpQdvbtp/re6aWPCrpWUnH\nbF+cXZ7se6gWHJB0xvYn2jnwnK6qt3ue6WeDfJkMQDODPIIDaIbAgWAEDgQjcCAYgQPBBh+47fW+\nZ+gC+zU8e3HfBh+4pD33h9oS9mt49ty+JQQO4CY6eaPL/v37a3V1tfX73c10OtVoNFrKYy0T+9WO\nzc3NpT3WslXVbv/p6n/c0cUDr66uajKZdHHXwC3ZeQv8bxe/ogPBCBwIRuBAMAIHghE4EIzAgWAE\nDgQjcCAYgQPBCBwIRuBAMAIHghE4EIzAgWAEDgQjcCAYgQPBCBwIRuBAMAIHghE4EKxR4LbXbH9h\n+7LtF7seCkA75gZue0XSnyU9IekhScdtP9T1YAAW1+QIflTS5ar6sqp+lPS6pKe6HQtAG5oEflDS\nV9dtb8++BmCPaxL4bktD/Gq9I9vrtie2J9PpdPHJACysSeDbkg5ft31I0tc33qiqNqpqXFXjxDW1\ngCFqEvh5SQ/Yvt/2nZKekfRWt2MBaMPcxQer6prt5yW9K2lF0smqutT5ZAAW1mh10ap6R9I7Hc8C\noGW8kw0IRuBAMAIHghE4EIzAgWAEDgQjcCAYgQPBCBwIRuBAMAIHghE4EIzAgWAEDgQjcCAYgQPB\nCBwIRuBAMAIHghE4EIzAgWCNPlUV+ezdFrAZvqpfLcITYTweN7odR3AgGIEDwQgcCEbgQDACB4IR\nOBCMwIFgBA4EI3AgGIEDwQgcCEbgQDACB4IROBCMwIFgBA4EI3AgGIEDwQgcCEbgQDACB4IROBCM\nwIFgBA4Emxu47ZO2r9j+dBkDAWhPkyP4XyStdTwHgA7MDbyq3pf07RJmAdCy1p6D2163PbE9mU6n\nbd0tgAW0FnhVbVTVuKrGo9GorbsFsADOogPBCBwI1uRlstckfSDpQdvbtp/rfiwAbbhj3g2q6vgy\nBgHQPn5FB4IROBCMwIFgBA4EI3AgGIEDwQgcCEbgQDACB4IROBCMwIFgBA4EI3AgGIEDwQgcCEbg\nQDACB4IROBCMwIFgBA4EI3Ag2NxPVcUvbPc9Qmeqqu8R0AGO4EAwAgeCETgQjMCBYAQOBCNwIBiB\nA8EIHAhG4EAwAgeCETgQjMCBYAQOBCNwIBiBA8EIHAhG4EAwAgeCETgQjMCBYAQOBCNwIBiBA8Hm\nBm77sO0ztrdsX7J9YhmDAVhck4UPrkn6U1VdsH2vpE3bp6vqs45nA7CguUfwqvqmqi7Mrv8gaUvS\nwa4HA7C4W3oObntV0hFJ57oYBkC7Ggdu+x5JpyS9UFXf7/L9ddsT25PpdNrmjABuU6PAbe/TTtyv\nVtWbu92mqjaqalxV49Fo1OaMAG5Tk7PolvSKpK2qern7kQC0pckR/FFJz0o6Zvvi7PJkx3MBaMHc\nl8mq6qyk3IWxgWC8kw0IRuBAMAIHghE4EIzAgWAEDgQjcCAYgQPBCBwIRuBAMAIHghE4EIzAgWAE\nDgQjcCAYgQPBCBwIRuBAMAIHghE4EIzAgWBNFh+8ZZubm9r5OPUsVdX3CMAt4QgOBCNwIBiBA8EI\nHAhG4EAwAgeCETgQjMCBYAQOBCNwIBiBA8EIHAhG4EAwAgeCETgQjMCBYAQOBCNwIBiBA8EIHAhG\n4EAwAgeCETgQbG7gtu+y/ZHtj21fsv3SMgYDsLgmCx/8W9Kxqrpqe5+ks7b/XlUfdjwbgAXNDbx2\nlvO4OtvcN7uwxAcwAI2eg9tesX1R0hVJp6vqXLdjAWhDo8Cr6qeqekTSIUlHbT98421sr9ue2J60\nPSSA23NLZ9Gr6jtJ70la2+V7G1U1rqpxS7MBWFCTs+gj2/fNrt8t6XFJn3c9GIDFNTmLfkDSX22v\naOcHwhtV9Xa3YwFoQ5Oz6J9IOrKEWQC0jHeyAcEIHAhG4EAwAgeCETgQjMCBYAQOBCNwIBiBA8EI\nHAhG4EAwAgeCETgQjMCBYAQOBCNwIBiBA8EIHAhG4EAwAgeCETgQjMCBYE0+F/12/EvSPzu67xvt\nnz1e52wv42H+a2n7tWSp+yUtd9/+0ORG3lk8dLhsTxKXS2K/hmcv7hu/ogPBCBwIlhD4Rt8DdIT9\nGp49t2+Dfw4O4OYSjuAAboLAgWAEDgQjcCAYgQPB/gOUdKou5Dn0XwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1ed71b1e198>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nCiPA9J/16AAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1ed7285a9b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "'''\n",
    "unstable TMM formation to analyze the plane wave in an individual LHI\n",
    "everything checks out\n",
    "'''\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "from scipy import linalg as LA\n",
    "import cmath;\n",
    "\n",
    "#specify incident wave parameters\n",
    "L0 = 1e-6;\n",
    "wavelengths = 1e-6; #;\n",
    "k0 = 2*np.pi/wavelengths;\n",
    "\n",
    "## initial amplitude as TE mode, with only Ey and Hx\n",
    "c0 = np.matrix([0,0,0,1])*(1/np.sqrt(2));\n",
    "#Ex, Ey, Hx, Hy\n",
    "c0 = c0.T;\n",
    "\n",
    "theta = 0; #normal incidence\n",
    "phi = 0;\n",
    "kx = 0; ky = 0;\n",
    "e_r = 1; mu_r = 1;\n",
    "\n",
    "# solution in an LHI layer\n",
    "P = np.matrix([[kx*ky/mu_r, e_r - kx**2/mu_r],[ky**2/mu_r - e_r, -kx*ky/mu_r]])\n",
    "Q = np.matrix([[kx*ky/e_r, mu_r - kx**2/e_r],[ky**2/e_r - mu_r, -kx*ky/e_r]])\n",
    "\n",
    "Gamma = np.block([[np.zeros((2,2)), P],[Q, np.zeros((2,2))]])\n",
    "plt.figure();\n",
    "plt.spy(Gamma) #should be anti-diagonal\n",
    "\n",
    "Lambda, W = np.linalg.eig(Gamma); #LAMBDa is effectively refractive index\n",
    "eigen_matrix = np.diag(Lambda);\n",
    "\n",
    "print('check on eigendecomp')\n",
    "print(np.linalg.norm(W*eigen_matrix*np.linalg.inv(W) - Gamma)); #should be near zero\n",
    "\n",
    "#sort lambda and W\n",
    "argument_sort = np.argsort(Lambda);\n",
    "lambda_sort = (np.sort(Lambda))\n",
    "W_sort = W[:,argument_sort];\n",
    "#if the solution is right, then we can iterate over Z and get a sinusoid\n",
    "\n",
    "fields = list();\n",
    "for z in np.linspace(0,1,100)*1e-6:\n",
    "    X = np.matrix(LA.expm(-eigen_matrix*k0*z));\n",
    "    #print(X)\n",
    "    ## identifying the solution\n",
    "    phi = np.array(W*X*np.linalg.inv(W)*c0);\n",
    "    fields.append(np.squeeze(phi));\n",
    "\n",
    "fields = np.array(fields);\n",
    "print(fields.shape)\n",
    "plt.figure()\n",
    "plt.plot(np.linspace(1,2,100), np.real(fields[:,:])); #plotting the real part\n",
    "plt.legend(['Ex', 'Ey', 'Hx', 'Hy'])\n",
    "plt.plot(np.linspace(1,2,100), cmath.sqrt(-1)*np.imag(fields[:,2:])) #what does the imaginary field part encode?\n",
    "plt.xlabel('z (microns)')\n",
    "# remember that iwmu_0H = del (cross) E, but in this calculation\n",
    "#the difference between H and E is simply the scaling of 1/er and 1/mu_r\n",
    "# according to EMLab, the fields should be out of phase for each mode...,\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
